home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / pascal / totsrc11.zip / TOTMENU.INC < prev    next >
Text File  |  1993-05-04  |  14KB  |  606 lines

  1. {               Copyright 1991 TechnoJock Software, Inc.               }
  2. {                          All Rights Reserved                         }
  3. {                         Restricted by License                        }
  4.  
  5. {File TOTMENU.INC}
  6.  
  7. {|||||||||||||||||||||||||||||||||||||||||||||||}
  8. {                                               }
  9. {     B a s e M e n u O B J   M E T H O D S     }
  10. {                                               }
  11. {|||||||||||||||||||||||||||||||||||||||||||||||}
  12. constructor BaseMenuOBJ.Init;
  13. {}
  14. begin
  15.    vItemStack := nil; 
  16.    vTotalItems := 0;
  17.    vActiveItem := 0;
  18.    vAllowEsc := true;
  19.    vUsedInPull := false;
  20.    vMsgVisible := false;
  21.    vSubActive := false;
  22.    vMenuHiHot := LookTOT^.MenuHiHot;
  23.    vMenuHiNorm := LookTOT^.MenuHiNorm;
  24.    vMenuLoHot := LookTOT^.MenuLoHot;
  25.    vMenuLoNorm := LookTOT^.MenuLoNorm;
  26.    vMenuOff := LookTOT^.MenuOff;
  27.    vPickOff := true;
  28.    vGap := 2;
  29.    vWidth := 0;
  30.    vX := 0;
  31.    vY := 0;
  32.    vMsgX := 0;
  33.    vMsgY := Monitor^.Depth;
  34.    vHelpKey := 315;
  35.    vhelpHook := NoHelpHook;
  36. end; {BaseMenuOBJ.Init}
  37.  
  38. function BaseMenuOBJ.ItemPtr(Item:byte): MenuItemPtr;
  39. {}
  40. var 
  41.    Temp: MenuItemPtr;
  42.    I: integer;
  43. begin
  44.    if (Item < 1) or (Item > vTotalItems) then
  45.       ItemPtr := nil
  46.    else
  47.    begin
  48.       Temp := vItemStack;
  49.       if Item > 1 then
  50.          for I := 2 to Item do
  51.              if Temp <> nil then
  52.                 Temp := Temp^.NextNode;
  53.       ItemPtr := Temp;
  54.    end;
  55. end; {BaseMenuOBJ.ItemPtr}
  56.  
  57. function BaseMenuOBJ.FirstActiveItem: byte;
  58. {}
  59. var 
  60.    Temp: MenuItemPtr;
  61.    I: integer;
  62. begin
  63.    Temp := vItemStack;
  64.    if Temp = nil then
  65.       FirstActiveItem := 0
  66.    else
  67.    begin
  68.       I := 1;
  69.       while (Temp <> nil) and (Temp^.Active = false) do
  70.       begin
  71.          inc(I);
  72.          Temp := Temp^.NextNode;
  73.       end;
  74.       FirstActiveItem := I;
  75.    end;
  76. end; {BaseMenuOBJ.FirstActiveItem}
  77.  
  78. procedure BaseMenuOBJ.AddFullItem(Txt:StrVisible; ID,HK:word; Msg:StrVisible; SubM:BaseMenuPtr);
  79. {}
  80. begin
  81.    AddItem(Txt);
  82.    SetID(vTotalItems,ID);
  83.    SetHK(vTotalItems,HK);
  84.    SetMessage(vTotalItems,Msg);
  85.    SetSubMenu(vTotalItems,SubM);
  86. end; {BaseMenuOBJ.AddFullItem}
  87.  
  88. procedure BaseMenuOBJ.AddItem(Txt:StrVisible);
  89. {}
  90. var 
  91.    Temp: MenuItemPtr;
  92.    L : byte;
  93. begin
  94.    if MaxAvail < sizeof(vItemStack^)+succ(length(Txt)) then
  95.       exit
  96.    else
  97.    begin
  98.       if vItemStack = nil then
  99.       begin
  100.          getmem(vItemStack,sizeof(vItemStack^));
  101.          vActiveItem := 1;
  102.          Temp := vItemStack;
  103.       end
  104.       else
  105.       begin
  106.          Temp := ItemPtr(vTotalItems);
  107.          getmem(Temp^.NextNode, sizeof(Temp^));
  108.          Temp := Temp^.NextNode;
  109.       end;
  110.       Temp^.NextNode := nil;
  111.       inc(vTotalItems);
  112.       with Temp^ do
  113.       begin
  114.          L := succ(length(Txt));
  115.          if L = 1 then
  116.            TxtPtr := nil
  117.          else
  118.          begin
  119.             if MemAvail >=  L then
  120.             begin
  121.                getmem(TxtPtr,L);
  122.                move(Txt[0],TxtPtr^,L);
  123.             end;
  124.          end;  
  125.          MsgPtr := nil;
  126.          HK :=  0;
  127.          ID := 0;
  128.          if (Txt = '-') or (Txt = '=') or (Txt = '') then
  129.             Active := false
  130.          else
  131.             Active := true;
  132.          SubMenu := nil;
  133.       end;
  134.       L := length(strip('A',Screen.HiMarker,Txt));
  135.       if L > vWidth then
  136.          vWidth := L;
  137.    end;
  138. end; {BaseMenuOBJ.AddItem}
  139.  
  140. procedure BaseMenuOBJ.SetTopic(Item:byte; Txt:StrVisible);
  141. {}
  142. var 
  143.    Temp: MenuItemPtr;
  144.    L: byte;
  145. begin
  146.    Temp := ItemPtr(Item);
  147.    if Temp <> nil then
  148.    begin
  149.       if Temp^.TxtPtr <> nil then
  150.       begin
  151.          move(Temp^.TxtPtr^,L,1);
  152.          freemem(Temp^.TxtPtr,L);
  153.       end;
  154.       L := succ(length(Txt));
  155.       if memavail >= L then
  156.       begin
  157.          if L = 1 then
  158.            Temp^.TxtPtr := nil
  159.          else
  160.          begin
  161.             getmem(Temp^.TxtPtr,L);
  162.             move(Txt[0],Temp^.TxtPtr^,L);
  163.          end;
  164.       end;
  165.    end;
  166. end; {BaseMenuOBJ.SetTopic}
  167.  
  168. procedure BaseMenuOBJ.SetMessage(Item:byte; Msg:StrVisible);
  169. {}
  170. var 
  171.    Temp: MenuItemPtr;
  172.    L: byte;
  173. begin
  174.    Temp := ItemPtr(Item);
  175.    if Temp <> nil then
  176.    begin
  177.       if Temp^.MsgPtr <> nil then
  178.       begin
  179.          move(Temp^.MsgPtr^,L,1);
  180.          freemem(Temp^.MsgPtr,L);
  181.       end;
  182.       L := succ(length(Msg));
  183.       if memavail >= L then
  184.       begin
  185.          if L = 1 then
  186.            Temp^.MsgPtr := nil
  187.          else
  188.          begin
  189.             getmem(Temp^.MsgPtr,L);
  190.             move(Msg[0],Temp^.MsgPtr^,L);
  191.          end;
  192.       end;
  193.    end;
  194. end; {BaseMenuOBJ.SetMessage}
  195.  
  196. procedure BaseMenuOBJ.SetHK(Item:byte; HK:word);
  197. {}
  198. var Temp: MenuItemPtr;
  199. begin
  200.    Temp := ItemPtr(Item);
  201.    if Temp <> nil then
  202.       Temp^.HK := HK;
  203. end; {BaseMenuOBJ.SetHK}
  204.  
  205. procedure BaseMenuOBJ.SetID(Item:byte; ID:word);
  206. {}
  207. var Temp: MenuItemPtr;
  208. begin
  209.    Temp := ItemPtr(Item);
  210.    if Temp <> nil then
  211.       Temp^.ID := ID;
  212. end; {BaseMenuOBJ.SetID}
  213.  
  214. procedure BaseMenuOBJ.SetStatus(Item:byte; On:boolean);
  215. {}
  216. var Temp: MenuItemPtr;
  217. begin
  218.    Temp := ItemPtr(Item);
  219.    if Temp <> nil then
  220.       Temp^.Active := On;
  221. end; {BaseMenuOBJ.SetStatus}
  222.  
  223. procedure BaseMenuOBJ.SetSubMenu(Item:byte;SubMenu:BaseMenuPtr);
  224. {}
  225. var 
  226.   Temp: MenuItemPtr;
  227.   L: byte;
  228.   Str: StrVisible;
  229. begin
  230.    Temp := ItemPtr(Item);
  231.    if Temp <> nil then
  232.    begin
  233.       Temp^.SubMenu := SubMenu;
  234.       Str := GetText(Temp);
  235.       L := succ(length(strip('A',Screen.HiMarker,Str)));
  236.       if L > vWidth then
  237.          vWidth := L;
  238.    end;
  239. end; {BaseMenuOBJ.SetSubMenu}
  240.  
  241. procedure BaseMenuOBJ.SetGap(G:byte);
  242. {}
  243. begin
  244.    vGap := G;
  245. end; {BaseMenuOBJ.SetGap}
  246.  
  247. procedure BaseMenuOBJ.SetActiveItem(Item:byte);
  248. {}
  249. begin
  250.    if Item in [1..vTotalItems] then
  251.       vActiveItem := Item;
  252. end; {BaseMenuOBJ.SetActiveItem}
  253.  
  254. procedure BaseMenuOBJ.SetMessageXY(X,Y:byte);
  255. {}
  256. begin
  257.    vMsgX := X;
  258.    vMsgY := Y;
  259. end; {BaseMenuOBJ.SetMessageXY}
  260.  
  261. procedure BaseMenuOBJ.SetMenuXY(X,Y:byte);
  262. {}
  263. begin
  264.    vX := X;
  265.    vY := Y;
  266. end; {BaseMenuOBJ.SetMenuXY}
  267.  
  268. procedure BaseMenuOBJ.SetHelpKey(K:word);
  269. {}
  270. begin
  271.    vHelpKey := K;
  272. end; {BaseMenuOBJ.SetHelpKey}
  273.  
  274. procedure BaseMenuOBJ.SetAllowEsc(On:boolean);
  275. {}
  276. begin
  277.    vAllowEsc := On;
  278. end; {BaseMenuOBJ.SetAllowEsc}
  279.  
  280. procedure BaseMenuOBJ.SetColors(HiHot,HiNorm,LoHot,LoNorm,Off:byte);
  281. {}
  282. begin
  283.    vMenuHiHot := HiHot;
  284.    vMenuHiNorm := HiNorm;
  285.    vMenuLoHot := LoHot;
  286.    vMenuLoNorm := LoNorm;
  287.    vMenuOff := Off;
  288. end; {BaseMenuOBJ.SetColors}
  289.  
  290. function BaseMenuOBJ.GetAllowEsc: boolean;
  291. {}
  292. begin
  293.    GetAllowEsc := vAllowEsc;
  294. end; {BaseMenuOBJ.GetAllowEsc}
  295.  
  296. function BaseMenuOBJ.GetText(Ptr:MenuItemPtr): StrVisible;
  297. {}
  298. var 
  299.   Str: StrVisible;
  300.   L : byte;
  301. begin
  302.    Str := '';
  303.    if Ptr <> nil then
  304.       if Ptr^.TxtPtr <> nil then
  305.       begin
  306.          move(Ptr^.TxtPtr^,L,1);
  307.          if L > 0 then
  308.             move(Ptr^.TxtPtr^,Str,succ(L));
  309.       end;
  310.    GetText := Str;
  311. end; {BaseMenuOBJ.GetText}
  312.  
  313. function BaseMenuOBJ.GetMessage(Ptr:MenuItemPtr): StrVisible;
  314. {}
  315. var 
  316.   Str: StrVisible;
  317.   L : byte;
  318. begin
  319.    Str := '';
  320.    if Ptr <> nil then
  321.       if Ptr^.MsgPtr <> nil then
  322.       begin
  323.          move(Ptr^.MsgPtr^,L,1);
  324.          if L > 0 then
  325.             move(Ptr^.MsgPtr^,Str,succ(L));
  326.       end;
  327.    GetMessage := Str;
  328. end; {BaseMenuOBJ.GetMessage}
  329.  
  330. function BaseMenuOBJ.GetID(Item:byte):word;
  331. {}
  332. var Temp: MenuItemPtr;
  333. begin
  334.    Temp := ItemPtr(Item);
  335.    if Temp <> nil then
  336.       GetID := Temp^.ID
  337.    else
  338.       GetID := 0;
  339. end; {BaseMenuOBJ.GetID}
  340.  
  341. function BaseMenuOBJ.GetHelpID:word;
  342. {}
  343. var 
  344.   Temp: MenuItemPtr;
  345.    Sub: BaseMenuPtr;
  346. begin
  347.    Temp := ItemPtr(vActiveItem);
  348.    if Temp <> nil then
  349.    begin
  350.       Sub := Temp^.Submenu;
  351.       if (Sub <> nil) and vSubActive then
  352.          GetHelpID := Sub^.GetHelpID
  353.       else
  354.          GetHelpID := Temp^.ID;
  355.    end
  356.    else
  357.       GetHelpID := 0;
  358. end; {BaseMenuOBJ.GetHelpID}
  359.  
  360. function BaseMenuOBJ.GetActiveItem: byte;
  361. {}
  362. begin
  363.    GetActiveItem := vActiveItem;
  364. end